<!DOCTYPE html>
<html>
<head>
	<meta charset="utf-8">
	<meta http-equiv="X-UA-Compatible" content="IE=edge">
	<title>闭包</title>
	<link rel="stylesheet" href="">
</head>
<body>
<script>
	<!-- 以下例子会产生闭包 -->
	// 利用变量保存this对象
	// 闭包其实就是对变量的引用产生的
	var name = "window"
	var p = {
		name: 'Ken',
		getName:function() {
			var self = this;
			// 内部函数对变量 this 的引用
			return function() {
				return self.name;
			}
		}
	}
	var getName = p.getName()
	var _name = getName()
	console.log(_name)
	
	// 使用call也不会产生闭包
	// 使用call
	// 没有变量的引用
	var name = "window"
	var p = {
		name: 'Ken',
		getName:function() {
			return function() {
				return this.name;
			}
		}
	}
	var getName = p.getName()
	var _name = getName.call(p)
	console.log(_name)
	
	// 下面这个例子会产生闭包
	function add(x) {
		return function _add(y){
			return x+y
		}
	}

	var sum = add(2)(3)
	console.log(sum)
</script>	
</body>
</html>